]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
main: Use Clutter.grab() underneath Main.push/popModal
authorCarlos Garnacho <carlosg@gnome.org>
Wed, 17 Nov 2021 23:36:44 +0000 (00:36 +0100)
committerCarlos Garnacho <carlosg@gnome.org>
Sat, 29 Jan 2022 00:16:29 +0000 (01:16 +0100)
Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2045>

js/ui/main.js

index ecb7a980f49a48f521c7bb18f0f935a45f836bb8..11ac073bbe5b10854826eef56c81861294afdab5 100644 (file)
@@ -544,13 +544,10 @@ function pushModal(actor, params) {
                                     options: 0,
                                     actionMode: Shell.ActionMode.NONE });
 
-    if (modalCount == 0) {
-        if (!global.begin_modal(params.timestamp, params.options)) {
-            log('pushModal: invocation of begin_modal failed');
-            return false;
-        }
+    let grab = global.stage.grab(actor);
+
+    if (modalCount === 0)
         Meta.disable_unredirect_for_display(global.display);
-    }
 
     modalCount += 1;
     let actorDestroyId = actor.connect('destroy', () => {
@@ -571,10 +568,12 @@ function pushModal(actor, params) {
         });
     }
     modalActorFocusStack.push({ actor,
-                                destroyId: actorDestroyId,
-                                prevFocus,
-                                prevFocusDestroyId,
-                                actionMode });
+        grab,
+        destroyId: actorDestroyId,
+        prevFocus,
+        prevFocusDestroyId,
+        actionMode,
+    });
 
     actionMode = params.actionMode;
     global.stage.set_key_focus(actor);
@@ -602,7 +601,6 @@ function popModal(actor, timestamp) {
     let focusIndex = _findModal(actor);
     if (focusIndex < 0) {
         global.stage.set_key_focus(null);
-        global.end_modal(timestamp);
         actionMode = Shell.ActionMode.NORMAL;
 
         throw new Error('incorrect pop');
@@ -613,6 +611,9 @@ function popModal(actor, timestamp) {
     let record = modalActorFocusStack[focusIndex];
     record.actor.disconnect(record.destroyId);
 
+    let grab = record.grab;
+    grab.dismiss();
+
     if (focusIndex == modalActorFocusStack.length - 1) {
         if (record.prevFocus)
             record.prevFocus.disconnect(record.prevFocusDestroyId);
@@ -650,7 +651,6 @@ function popModal(actor, timestamp) {
         return;
 
     layoutManager.modalEnded();
-    global.end_modal(timestamp);
     Meta.enable_unredirect_for_display(global.display);
     actionMode = Shell.ActionMode.NORMAL;
 }